home *** CD-ROM | disk | FTP | other *** search
/ Ham Radio 2000 #1 / Ham Radio 2000.iso / ham2000 / packet / p_aa4re / bb212src / bbwinad.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1992-02-16  |  6.8 KB  |  261 lines

  1. (*===========================================================================*)
  2. (* Activate/deactivate/swap the window                                       *)
  3. (*                                                                           *)
  4. (*   Copyright 1988, 1989, 1991 by H. Roy Engehausen.  All rights reserved.  *)
  5. (*                                                                           *)
  6. (*===========================================================================*)
  7.  
  8. (*===========================================================================*)
  9. (* Activate a window                                                         *)
  10. (*===========================================================================*)
  11.  
  12. PROCEDURE window_activate(window_number:BYTE);
  13.   BEGIN;
  14.  
  15.     IF window_number <> window_operator THEN
  16.       BEGIN;
  17.         WRITELN('Can''t activate ', window_number);
  18.         HALT;
  19.       END;
  20.  
  21.     window_number :=
  22.                   who_is_in_window(window_array[window_operator].window_loc);
  23.  
  24.     window_array[window_number].window_act  := FALSE;
  25.     window_array[window_operator].window_act := TRUE;
  26.  
  27.     window_select(window_operator);
  28.  
  29.     CLRSCR;
  30.  
  31.     window_refresh(window_operator);
  32.  
  33.     WITH window_array[current_window] DO
  34.       GOTOXY(window_cursor, window_location[window_loc].window_wl);
  35.  
  36.     status_window_change := TRUE;
  37.  
  38.   END;
  39.  
  40. (*===========================================================================*)
  41. (* Deactivate a window                                                      *)
  42. (*===========================================================================*)
  43.  
  44. PROCEDURE window_deactivate(window_number:BYTE);
  45.   BEGIN;
  46.  
  47.     IF window_number <> window_operator THEN
  48.       BEGIN;
  49.         WRITELN('Can''t deactivate ', window_number);
  50.         HALT;
  51.       END;
  52.  
  53.     window_number :=
  54.                   who_is_in_window(window_array[window_operator].window_loc);
  55.  
  56.     window_array[window_operator].window_act := FALSE;
  57.     window_array[window_number].window_act   := TRUE;
  58.  
  59.     window_select(window_number);
  60.     CLRSCR;
  61.  
  62.     window_refresh(window_number);
  63.  
  64.     WITH window_array[current_window] DO
  65.       GOTOXY(window_cursor, window_location[window_loc].window_wl);
  66.  
  67.     status_window_change := TRUE;
  68.   END;
  69.  
  70. (*===========================================================================*)
  71. (* Window select                                                             *)
  72. (*===========================================================================*)
  73.  
  74. PROCEDURE window_select(window_number : BYTE);
  75.  
  76.   BEGIN;
  77.  
  78.     {$IFDEF DEBUG}
  79.       WRITELN('WS - ', window_number);
  80.       DELAY(1000);
  81.     {$ENDIF}
  82.  
  83.     window_array[current_window].window_cursor := WHEREX;
  84.  
  85.     IF current_window = window_reset THEN
  86.       reset_window_y := WHEREY;
  87.  
  88.     current_window := window_number;
  89.  
  90.     WITH window_array[current_window] DO
  91.       BEGIN;
  92.  
  93.         IF NOT window_act THEN
  94.           EXIT;
  95.  
  96.         {$IFDEF DEBUG}
  97.           WRITELN('WINDOW COORD - ', window_number);
  98.           DELAY(1000);
  99.         {$ENDIF}
  100.  
  101.         WITH window_location[window_loc] DO
  102.           BEGIN;
  103.  
  104.             {$IFDEF DEBUG}
  105.               WRITELN('WINDOW COORD - ', window_u_y, '/', window_l_y);
  106.               DELAY(1000);
  107.             {$ENDIF}
  108.  
  109.             WINDOW( 1, window_u_y,
  110.                    80, window_l_y);
  111.  
  112.             {$IFDEF DEBUG}
  113.               WRITELN('WINDOW CURSOR - ', window_wl);
  114.               DELAY(1000);
  115.             {$ENDIF}
  116.  
  117.             IF window_number <> window_reset THEN
  118.               GOTOXY(window_cursor, window_wl)
  119.             ELSE
  120.               GOTOXY(window_cursor, reset_window_y);
  121.           END;
  122.  
  123.         {$IFDEF DEBUG}
  124.           WRITELN('WINDOW color - ', active_tcb^.w_color);
  125.           DELAY(1000);
  126.         {$ENDIF}
  127.  
  128.         COLOR(active_tcb^.w_color);
  129.  
  130.         {$IFDEF DEBUG}
  131.           WRITELN('WS end', active_tcb^.w_color);
  132.           DELAY(1000);
  133.         {$ENDIF}
  134.  
  135.       END;
  136.  
  137.   END;
  138.  
  139. (*===========================================================================*)
  140. (* Window swap                                                               *)
  141. (*===========================================================================*)
  142.  
  143. PROCEDURE window_swap;
  144.  
  145.   VAR
  146.     b      : BOOLEAN;
  147.     w_1_no : BYTE;
  148.     w_2_no : BYTE;
  149.  
  150.   BEGIN;
  151.  
  152.     w_1_no := who_is_in_window(window_top_screen);
  153.     w_2_no := who_is_in_window(window_bottom_screen);
  154.  
  155.     WITH window_array[w_1_no] DO
  156.       BEGIN;
  157.         window_loc := window_bottom_screen;
  158.         window_act := window_array[w_2_no].window_act;
  159.         b          := window_act;
  160.       END;
  161.  
  162.     WITH window_array[w_2_no] DO
  163.       BEGIN;
  164.         window_loc := window_top_screen;
  165.         window_act := TRUE;
  166.       END;
  167.  
  168.     status_window_change := TRUE;
  169.  
  170.     window_select(w_2_no);
  171.     CLRSCR;
  172.     window_refresh(w_2_no);
  173.  
  174.     IF NOT b THEN EXIT;
  175.  
  176.     window_select(w_1_no);
  177.     CLRSCR;
  178.     window_refresh(w_1_no);
  179.  
  180.     window_select(window_reset);
  181.  
  182.   END;
  183.  
  184. (*===========================================================================*)
  185. (* Window clear                                                              *)
  186. (*===========================================================================*)
  187.  
  188. PROCEDURE window_clear(window_number : BYTE);
  189.  
  190.   VAR
  191.     w_work : window_data_ptr;
  192.     w_next : window_data_ptr;
  193.  
  194.   BEGIN;
  195.  
  196.     window_select(window_number);
  197.     CLRSCR;
  198.  
  199.     WITH window_array[window_number] DO
  200.       BEGIN;
  201.  
  202.         IF NOT window_scrollable THEN
  203.           EXIT;
  204.  
  205.         w_work := window_last;
  206.  
  207.         REPEAT
  208.  
  209.           w_next := w_work^.last_line;
  210.  
  211.           {$IFDEF LOOP_POINT_CHK}
  212.             IF w_next = w_work THEN
  213.               BEGIN;
  214.                 WRITELN('Window loop put wind ');
  215.                 dump_string('Wind loop at put wind ' + p2x(w_work));
  216.                 dump_window(current_window);
  217.                 HALT;
  218.               END;
  219.           {$ENDIF}
  220.  
  221.           IF w_next <> NIL THEN
  222.             BEGIN;
  223.  
  224.               {$IFDEF POINT_CHK}
  225.                 test_pointer(w_work);
  226.                 test_pointer(w_next);
  227.               {$ENDIF}
  228.  
  229.               DISPOSE(w_work);
  230.  
  231.               {$IFDEF FREE_CHK}
  232.                 test_free_list;
  233.               {$ENDIF}
  234.  
  235.               w_work := w_next;
  236.  
  237.             END;
  238.  
  239.         UNTIL w_next = NIL;
  240.  
  241.         {$IFDEF POINT_CHK}
  242.           test_pointer(w_work);
  243.         {$ENDIF}
  244.  
  245.         WITH w_work^ DO
  246.           BEGIN;
  247.             last_line  := NIL;
  248.             next_line  := NIL;
  249.             this_line  := '';
  250.             line_color := invisible_color;
  251.           END;
  252.  
  253.         window_data       := w_work;
  254.         window_count      := 0;
  255.         window_line       := w_work;
  256.         window_last       := w_work;
  257.  
  258.       END;
  259.  
  260.   END;
  261.